9. 硬盘挂载
10.1 磁盘分区
df 、 lsblk 和 fdisk -l 这三个命令都与磁盘和文件系统有关,但它们在功能和用法上略有不同。
- df 用于显示已挂载文件系统的使用情况,主要关注文件系统的使用率和可用空间
 - lsblk 用于列出块设备的信息,提供更详细的设备层次结构,包括磁盘、分区和挂载点
 - fdisk -l 用于显示磁盘分区表的详细信息,包括分区的起始扇区、大小和文件系统类型等
 
以上命令注意要以超级用户或管理员权限运行,以便获得完整的输出信息。
10.1.1 df
打开Core3566 终端输入:
linaro@linaro-alip:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 5.9G 3.0G 2.7G 53% /
devtmpfs 1.9G 8.0K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 17M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 1.9G 12K 1.9G 1% /tmp
/dev/mmcblk0p7 123M 13M 104M 11% /oem
/dev/mmcblk0p8 23G 44K 22G 1% /userdata
tmpfs 389M 12K 389M 1% /run/user/1000
/dev/sda 29G 64M 29G 1% /media/linaro/38E6EAF8E6EAB572以下是 df -h 命令输出中各个参数的含义:
- Filesystem:文件系统的名称或设备路径
 - Size:文件系统的总大小
 - Used:已使用的空间大小
 - Avail:可用空间大小
 - Use%:已使用空间占总空间的百分比
 - Mounted on:文件系统的挂载点
 
对于输出中的每一行,这些参数显示了相应文件系统的使用情况。
- 第一行 /dev/root 文件系统,它的总大小为 5.9GB,已使用 3.0GB,可用空间为 2.7GB,使用率为 53%。它被挂载在根目录 / 上。
 - 接下来的几行/dev/mmcblk0p7、/dev/mmcblk0p8、/dev/sda等分区显示了其他的文件系统和它们的挂载点,/dev/sda 是通过外部 USB 设备挂载的分区。
 - 临时文件系统(tmpfs)的挂载点,如 /dev/shm、/run、/run/lock、/sys/fs/cgroup 和 /tmp。这些临时文件系统是内存中的文件系统,不会持久保存数据。
 - /run/user/1000 是特定用户的临时文件系统,根据用户的 ID 可能会有所变化。
 
注意:文件系统的名称、设备路径和挂载点可能因系统配置而有所不同。输出中的数值单位是以 GB、MB 或 KB 表示的文件大小。
10.1.2 lsblk
打开Core3566 终端输入:
linaro@linaro-alip:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28.9G 0 disk /media/linaro/38E6EAF8E6EAB572
sdb 8:16 0 119.2G 0 disk
└─sdb1 8:17 0 119.2G 0 part /media/linaro/24FC743CFC7409F6
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 4M 0 part
├─mmcblk0p2 179:2 0 4M 0 part
├─mmcblk0p3 179:3 0 64M 0 part
├─mmcblk0p4 179:4 0 64M 0 part
├─mmcblk0p5 179:5 0 32M 0 part
├─mmcblk0p6 179:6 0 6G 0 part /
├─mmcblk0p7 179:7 0 128M 0 part /oem
└─mmcblk0p8 179:8 0 22.8G 0 part /userdata
mmcblk0boot0 179:32 0 4M 1 disk
mmcblk0boot1 179:64 0 4M 1 disk
nvme0n1 259:0 0 119.2G 0 disk
└─nvme0n1p1 259:1 0 119.1G 0 part以下是 lsblk 命令输出中各个参数的详细含义:
- NAME:块设备的名称
 - MAJ:MIN:块设备的主设备号和次设备号
 - RM:设备是否为可移动设备(1 表示可移动设备,0 表示非可移动设备)
 - SIZE:设备的总大小
 - RO:设备是否为只读(1 表示只读,0 表示可读写)
 - TYPE:设备的类型(disk 表示磁盘,part 表示分区)
 - MOUNTPOINT:设备的挂载点
 
对于输出中的每一行,这些参数提供了关于块设备的详细信息。在输出中,主要有以下设备:
- sda 是一个 u 盘,支持热插拔,RM=1,大小32G,换算到系统里是28.9G,可读可写。
 - sdb 是一个msata硬盘,通过USB TO SATA连接,不支持热插拔,RM=0,大小是120G的,换算到系统里是119.2G,可读可写,只有一个分区就是sdb1,被挂载到了 /media/linaro/24FC743CFC7409F6上。
 - mmcblk0 是板载 emmc,不支持热插拔,RM=0,大小32G,换算到系统是29.1G,可读可写,有八个分区:mmcblk0p6是根文件的分区,存放根文件系统,被挂载到/(根目录下的),mmcblk0p7被挂载到/oem,大小为128M; mmcblk0p8被挂载到了 /userdata 分区上,大小为22.8G;
 - nvme0n1 是一个NVMe 硬盘,不支持热插拔,RM=0,大小是120G的,换算到系统里是119.2G,可读可写,未挂载。
 
10.1.3 fdisk
打开Core3566 终端输入:
linaro@linaro-alip:~$ sudo fdisk -l
Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mmcblk0: 29.1 GiB, 31272730624 bytes, 61079552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 29520000-0000-4513-8000-796200006B99
Device Start End Sectors Size Type
/dev/mmcblk0p1 16384 24575 8192 4M unknown
/dev/mmcblk0p2 24576 32767 8192 4M unknown
/dev/mmcblk0p3 32768 163839 131072 64M unknown
/dev/mmcblk0p4 163840 294911 131072 64M unknown
/dev/mmcblk0p5 294912 360447 65536 32M unknown
/dev/mmcblk0p6 360448 12943359 12582912 6G unknown
/dev/mmcblk0p7 12943360 13205503 262144 128M unknown
/dev/mmcblk0p8 13205504 61079487 47873984 22.8G unknown
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 303104 250067631 249764528 119.1G 7 HPFS/NTFS/exFAT
Disk /dev/sda: 28.9 GiB, 31029460992 bytes, 60604416 sectors
Disk model: DataTraveler 3.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x73736572
Device Boot Start End Sectors Size Id Type
/dev/sda3 0 0 0 0B 0 Empty以下是各个参数的详细含义:
Disk /dev/ram0:一个大小为 4MB 的 RAM 磁盘。
- Units:扇区的单位大小。
 - Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
 - I/O size (minimum/optimal):最小和最佳的输入/输出大小。
 
Disk /dev/mmcblk0:Core3566自带的EMMC 磁盘,大小为 29.1GB 。
- Units:扇区的单位大小。
 - Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
 - Disklabel type:磁盘的分区表类型(gpt 表示 GUID 分区表)。
 - Disk identifier:磁盘的标识符。
 - Device:设备名称。
 - Start:分区的起始扇区。
 - End:分区的结束扇区。
 - Sectors:分区的扇区数量。
 - Size:分区的大小。
 - Type:分区的类型。
 
Disk /dev/nvme0n1:一个大小为 119.2GB 的 NVMe 磁盘。
- Disk model:磁盘的型号。
 - Units:扇区的单位大小。
 - Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
 - Disklabel type:磁盘的分区表类型(dos 表示 MBR 分区表)。
 - Disk identifier:磁盘的标识符。
 - Id:分区的标识符。
 - 在输出中,只有一个分区 /dev/nvme0n1p1,它是一个大小为 119.1GB 的 HPFS/NTFS/exFAT 类型分区。
 
Disk /dev/sda:是一个大小为 28.9GB 的 U 盘,只有一个分区 /dev/sda3,但它是一个空的分区。
10.2 磁盘分区操作
指定要分区的硬盘,进入分区模式:
linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table在 fdisk 交互界面中输入 m 可以得到帮助,帮助里列出了 fdisk 可以识别的交互命令,我们来解释一下这些命令:
命令 说 明 a 设置可引导标记 b 编辑 bsd 磁盘标签 c 设置 DOS 操作系统兼容标记 d 删除一个分区 1 显示已知的文件系统类型。82 为 Linux swap 分区,83 为 Linux 分区 m 显示帮助菜单 n 新建分区 0 建立空白 DOS 分区表 p 显示分区列表 q 不保存退出 s 新建空白 SUN 磁盘标签 t 改变一个分区的系统 ID u 改变显示记录单位 V 验证分区表 w 保存退出 X 附加功能(仅专家) 
10.2.1 创建分区
我们要建立一个主分区,命令如下:
linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p  #查看分区列表
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)       # p为主分区
   e   extended (container for logical partitions)   # e为扩展分区
Select (default p): p                                # 这里我选择新建主分区,回车
Partition number (1-4, default 1): 1                 # 选择分区编号1,回车
First sector (2048-250069679, default 2048):         # 这里回车即可,一般为上一个分区的结束大小作为此分区的开始大小
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-250069679, default 250069679): +5G #建立一个5GB大小的分区
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): p 
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc
Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n1p1       2048 10487807 10485760   5G 83 Linux
Command (m for help): w  #最后保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
10.2.2 删除分区
删除分区命令如下:
linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
10.3 磁盘格式化
格式化就是将分区格式化为不同的文件系统。Linux 下的文件类型有 ext2、ext3、ext4、xfs 等等,我们可以使用 mkfs 命令然后用按TAB、TAB 来查看都有哪些文件类型。(此命令要谨慎使用,建议移除多余设备,确保自己的资料已经备份)
linaro@linaro-alip:~$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda            8:0    1  28.9G  0 disk /media/linaro/38E6EAF8E6EAB572
mmcblk0      179:0    0  29.1G  0 disk
├─mmcblk0p1  179:1    0     4M  0 part
├─mmcblk0p2  179:2    0     4M  0 part
├─mmcblk0p3  179:3    0    64M  0 part
├─mmcblk0p4  179:4    0    64M  0 part
├─mmcblk0p5  179:5    0    32M  0 part
├─mmcblk0p6  179:6    0     6G  0 part /
├─mmcblk0p7  179:7    0   128M  0 part /oem
└─mmcblk0p8  179:8    0  22.8G  0 part /userdata
mmcblk0boot0 179:32   0     4M  1 disk
mmcblk0boot1 179:64   0     4M  1 disk
nvme0n1      259:0    0 119.2G  0 disk
linaro@linaro-alip:~$ sudo mkfs
mkfs         mkfs.bfs     mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.ntfs
linaro@linaro-alip:~$ sudo mkfs.ext4 /dev/nvme0n1
mke2fs 1.44.5 (15-Dec-2018)
Found a dos partition table in /dev/nvme0n1
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 31258710 4k blocks and 7815168 inodes
Filesystem UUID: aa2d60dc-8d46-46e3-820f-e90dbd5cd968
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done
10.4 磁盘挂载
10.4.1 手动挂载
首先在根目录下创建挂载点:
sudo mkdir /mnt/luckfox挂载硬盘:
linaro@linaro-alip:~$ sudo mount /dev/nvme0n1 /mnt/luckfox/
linaro@linaro-alip:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28.9G 0 disk /media/linaro/38E6EAF8E6EAB572
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 4M 0 part
├─mmcblk0p2 179:2 0 4M 0 part
├─mmcblk0p3 179:3 0 64M 0 part
├─mmcblk0p4 179:4 0 64M 0 part
├─mmcblk0p5 179:5 0 32M 0 part
├─mmcblk0p6 179:6 0 6G 0 part /
├─mmcblk0p7 179:7 0 128M 0 part /oem
└─mmcblk0p8 179:8 0 22.8G 0 part /userdata
mmcblk0boot0 179:32 0 4M 1 disk
mmcblk0boot1 179:64 0 4M 1 disk
nvme0n1 259:0 0 119.2G 0 disk /mnt/luckfox挂载之后,/mnt/luckfox/ 目录下会有一个 lost+found 文件
linaro@linaro-alip:~$ ls /mnt/luckfox/
lost+found卸载挂载点使用 umount 命令:
sudo umount /mnt/luckfox/
或者
sudo umount /dev/nvme0n1
10.4.2 自动挂载(谨慎使用)
注意:此部分操作需要认真核对配置文件的参数,及时备份自己的资料,配置错误可能会导致设备无法开机,推荐使用手动挂载。
使用blkid来查看分区的 UUID,UUID 唯一标识每一个分区,防止错误的挂载。除此之外,还会显示分区的类型。
linaro@linaro-alip:~$ sudo blkid
/dev/mmcblk0: PTUUID="29520000-0000-4513-8000-796200006b99" PTTYPE="gpt"
/dev/mmcblk0p1: PARTLABEL="uboot" PARTUUID="c2400000-0000-4e2e-8000-5abf000040fa"
/dev/mmcblk0p2: PARTLABEL="misc" PARTUUID="58640000-0000-443f-8000-6e6b00004a4b"
/dev/mmcblk0p3: PARTLABEL="boot" PARTUUID="b2660000-0000-4131-8000-062f00006ed5"
/dev/mmcblk0p4: PARTLABEL="recovery" PARTUUID="9a560000-0000-4b13-8000-5bd1000034dd"
/dev/mmcblk0p5: PARTLABEL="backup" PARTUUID="d6270000-0000-4b18-8000-0919000046ae"
/dev/mmcblk0p6: UUID="621abe90-b0a0-496c-a99c-b0a58f899d64" TYPE="ext4" PARTLABEL="rootfs" PARTUUID="614e0000-0000-4b53-8000-1d28000054a9"
/dev/mmcblk0p7: LABEL="oem" UUID="0ecbbe64-5664-4b7a-a9cc-d9e5139b6336" TYPE="ext2" PARTLABEL="oem" PARTUUID="6d240000-0000-4c0a-8000-4ebf000036c7"
/dev/mmcblk0p8: UUID="9b683981-e9c2-488b-8756-40f82c41d907" TYPE="ext2" PARTLABEL="userdata" PARTUUID="582b0000-0000-4e10-8000-10ad00001f9f"
/dev/nvme0n1: UUID="aa2d60dc-8d46-46e3-820f-e90dbd5cd968" TYPE="ext4"
/dev/sda: UUID="38E6EAF8E6EAB572" TYPE="ntfs"在根目录下创建挂载点:
sudo mkdir /mnt/luckfox要挂载 NVME 硬盘修改 /etc/fstab 文件,在文件末尾添加如下内容:
UUID="aa2d60dc-8d46-46e3-820f-e90dbd5cd968" /mnt/luckfox auto defaults 0 2- /mnt/luckfox 是要挂载的文件夹
 - auto 要挂载的硬盘分区的文件系统格式,”auto”是自动判断文件按系统格式,除此之外还有”ext4”,”ntfs”等
 - defaults 配置文件的模式,”defaults”是默认选项,除此之外还有”mode=1777”,”rw,noauto”等
 - 0 和 2 分别是备份和检查顺序